package com.desire.homework;

import java.time.LocalDate;
import java.time.Month;
import java.time.Year;

/**
 * @author LittleDesire
 * @description
 * @date 2022-02-10 周四 19:50
 * @since 17
 */
public class _55_判断闰年_指定日期当月最多有多少天 {
    public static void main(String[] args) {
        //判断当前年是不是闰年  java.time.LocalDate类
        var d1 = LocalDate.now();

        //  public boolean isLeapYear(long prolepticYear) {
        //  return ((prolepticYear & 3) == 0) && ((prolepticYear % 100) != 0 || (prolepticYear % 400) == 0);}
        //  (prolepticYear & 3) == 0 这个条件使用了位运算，与上3在二进制计算下即为：& 00…011。
        //  目的是保留最后2位二进制数，然后判断是否最后两位二进制数等于0。**其目的是判断prolepticYear是否是4的倍数**
        // （第3位开始的二进制数代表的十进制数为4、4 * 2、4 * 2 * 2·······），闰年一定要满足是4的倍数的条件；
        //(prolepticYear % 100) != 0 || (prolepticYear % 400) == 0 这个条件即为判断是否是整百数或是否是400的倍数。
        String info = String.format("%s年是%s%n", d1.getYear(), d1.isLeapYear() ? "闰年" : "平年");
        System.out.println(info);

//判断指定年份  java.time.Year 类
        var d2 = Year.of(2020);
        // java.time.LocalDate类 和 java.time.Year 类 的判断方法源码一模一样
        String d2info = String.format("%s年是%s%n", d2.getValue(), d2.isLeap() ? "闰年" : "平年");
        System.out.println(d2info);

        var m = Month.of(2);
        System.out.println(m.maxLength());//29
        System.out.println(m.minLength());//28

//求出指定日期最多有多少天
        var d3 = LocalDate.of(2020, 2, 1).lengthOfMonth();
        System.out.println(d3);//29
        System.out.println(LocalDate.now().lengthOfMonth());//31
    }
}
